package com.example.bigdata.scala.类

object ClassDemo {
    def main(args: Array[String]): Unit = {
        val user = new User10()
        user.test()
        user.test1()
    }
}

// 声明类
// 父类、继承
// 类可以声明为抽象类 abstract

abstract class Person{
    var name :String = _
    val i = 10
    //TODO 没有具体实现的方法 叫 抽象方法  即不需要 abstract 关键字来声明
    def test()
    def test1(): Unit ={
        println("parent test1 ...")
    }
}

class User10 extends Person{
    override val i = 20
    // 重写抽象方法  --> 将抽象方法补全即可
    def test(): Unit ={
        println("xxxxx")
    }
    // TODO Scala如果子类重写父类方法（不是抽象），需要添加 override 关键字
    override def test1(): Unit ={
        println("child test1 ...")
    }
}

class Persion11(s:String) {
    println("Persion 主构造方法")
}

// 如果父类主构造方法有参数，构建对象时必须显示传递参数
// 继承父类后面增加小括号，传递参数、等同于调用父类的构造方法
class User11() extends Persion11("xxxx"){
    println("User 主构造方法")
    def this(s:String) {
        this()
        println("User 辅助构造方法")
    }
}
